package com.wenchao.libnettytcp;

/**
 * @ProjectName: WetWipesMachine
 * @Package: com.zzcyi.wetwipesmachine.netty
 * @ClassName: CustomProtobufDecoder
 * @Description: java类作用描述
 * @Author: qiangSir
 * @CreateDate: 2020/11/14 13:57
 * @UpdateUser: 更新者
 * @UpdateDate: 2020/11/14 13:57
 * @UpdateRemark: 更新说明
 * @Version: 1.0
 */

import android.util.Log;

import java.util.List;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;

/**
 * <pre>
 * 自己定义的协议
 *  数据包格式
 * +——----——+——-----——+——----——+
 * |协议开始标志|  长度             |   数据       |
 * +——----——+——-----——+——----——+
 * 1.协议开始标志head_data，为int类型的数据，16进制表示为0X76
 * 2.传输数据的长度contentLength，int类型
 * 3.要传输的数据,长度不应该超过2048，防止socket流的攻击
 * </pre>
 *
 * @author zhangwenchao
 */
public class MessageProtocolDecoder extends ByteToMessageDecoder {

    /**
     * <pre>
     * 协议开始的标准head_data，int类型，占据4个字节.
     * 表示数据的长度contentLength，int类型，占据4个字节.
     * </pre>
     */
    public final int BASE_LENGTH = 4 + 4;

    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf byteBuf, List<Object> out) throws Exception {
        byte[] data = new byte[byteBuf.readableBytes()];
        Log.e("TAG", "decode: >>>>>>>>>>>>>>>>>>>>" + new String(data));
        byteBuf.readBytes(data);
        ByteBuf buf = Unpooled.copiedBuffer(data);
        out.add(buf);
    }

}